package com.itbaizhan.jdkdynaimc2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

//实现接口InvocationHandler接口 重写invoke（提及，调用，援用，援引）方法 ， 定义方法的增强方式
public class ShoppingProxy implements InvocationHandler {
    //把代理的对象传入来
    private Apple apple;

    public ShoppingProxy(Apple apple) {
        this.apple = apple;
    }

    /*定义原方法的增强方式
    * @param proxy  被代理对象
    * @param method 被代理对象调用的方法
    * @param args  被代理对象调用的方法时，传入的参数
    * @return  方法的返回值*/
    //用反射基础
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        String name = method.getName();
        if("sell".equals(name)){
            double price = (double)args[0]*0.9;//价格9折
            Object result = method.invoke(apple, price);//重新执行方法   括号里放对象与参数
            return result+"充电器";
        }else if("repair".equals(name)){
            System.out.println("专属客服为您服务");//增加方法流程
            return method.invoke(apple,args);//这里参数没有变
        }else {
            return method.invoke(apple,args);
        }



    }
}
